/*
 * @Descripttion: 工具类，引入文件后添加mixins
 * import Utils from '@/js/utils'
 * mixins: [Utils],
 * @Author: whl
 * @Date: 2022-06-29 10:27:36
 * @LastEditors: whl
 * @LastEditTime: 2022-06-29 10:28:43
 */
export default {
  methods: {
    /**
     * 函数节流，持续触发事件时，一定时间内只调用一次
     * 应用场景：鼠标不断点击触发，监听滚动事件
     * @click="throttle(btnHandler)(1,2)" ----有传参数
     * @click="throttle(btnHandler)() ----无参数
     * window.addEventListener('scroll', this.throttle(this.scrollHandler))
     * @param {function} fn 要执行的函数
     * @param {number} delay 延迟时间
     */
    throttle (fn, delay = 1500) {
      return function () {
        if (!fn.timerId) {
          fn.call(this, ...arguments)
          fn.timerId = setTimeout(() => {
            fn.timerId = null
          }, delay)
        }
      }
    },
    /**
     * 函数防抖，持续触发事件时，将多次操作合并为一次操作，只执行最后一次的触发
     * 应用场景：实时输入去搜索时可以用到，window触发resize的时候
     * @click="debounce(btnHandler)(1,2)" ----有传参数
     * @click="debounce(btnHandler)() ----无参数
     * @param {function} fn 要执行的函数
     * @param {number} delay 延迟时间
     */
    debounce (fn, delay = 1500) {
      // console.log('throttle')
      return function () {
        clearTimeout(fn.timerId)
        fn.timerId = setTimeout(() => {
          fn.call(this, ...arguments)
        }, delay)
      }
    }
  }
}
